#include "Sem.hpp"
#include <cstdio>
#include <time.h>
#include <unistd.h>

int main()
{
    SemaphoreBuilder sb;
    auto fsem = sb.SetVal(1).Build(BUILD_SEM); // 创建信号量集合,只有一个信号量，初始化成为1,就是当做锁来进行使用

    if (fork() == 0)
    {
        auto csem = sb.Build(GET_SEM);
        int cnt = 10;
        while (cnt--)
        {
            csem->P();

            printf("C");
            fflush(stdout);
            usleep(rand() % 95270);
            printf("C ");
            usleep(rand() % 43990);
            fflush(stdout);

            csem->V();
        }
        exit(0);
    }
    int cnt = 50;
    while (cnt--)
    {
        fsem->P();
        printf("F");
        fflush(stdout);
        usleep(rand() % 95270);
        printf("F ");
        usleep(rand() % 43990);
        fflush(stdout);
        fsem->V();
    }

    return 0;
}